<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <h4>实例继承</h4>
  <h5>特点：</h5>
  <ul>
    <li>1、不限制调用方式，不管是new 子类()还是子类(),返回的对象具有相同的效果</li>
  </ul>

  <h5>缺点：</h5>
  <ul>
    <li>1、实例是父类的实例，不是子类的实例</li>
    <li>2、不支持多继承</li>
  </ul>

  <script>
    // 定义一个动物类
    function Animal(name) {
      // 属性
      this.name = name || 'Animal';
      // 实例方法
      this.sleep = function () {
        console.log(this.name + '正在睡觉！');
      }
    }
    // 原型方法
    Animal.prototype.eat = function (food) {
      console.log(this.name + '正在吃：' + food);
    };



    function Cat(name) {
      var instance = new Animal();// 核心：为父类实例添加新特性，作为子类实例返回
      instance.name = name || 'Tom';
      instance.test = 'test';
      return instance;
    }

    // Test Code
    console.dir(Cat())
    var cat = new Cat();
    console.dir(cat)
    console.log(cat.name);
    cat.sleep()
    cat.eat('食物')
    console.log(cat instanceof Animal); // true
    console.log(cat instanceof Cat); // false
  </script>

</body>

</html>